iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
  • 什麼是物件導向?
  • 為什麼需要物件導向?
  • 物件導向重要在什麼地方?

要回答第一個問題前,必須先回答一件事:物件(Object)是什麼?

在Struct、Class的語法篇章中,都共通的使用了一個專有名詞叫做「實體化」,這個名詞代表的意義就是「產生了一個實體(instance)」,這個概念的重要性在於,我們在使用Struct、Class去寫程式的時候,其實就是在寫一個「藍圖」,興許拿工程來比喻:

當我實體化一個東西,就是同等於我把我寫出來的一個設計藍圖化為真正的存在

於是,我們實體化了一個東西,也就代表了一個物件的產生。同時,也意味著我們將設計藍圖的真正地創造成了一個「存在物」。

實體(instance)在現在我們所說的意義中代表的就是物件(Object)。

封裝(Encapsulation)

封裝的概念就有點像是一個包裝的盒子,我們可以決定這個盒子裡面裝什麼,以及這個盒子的哪個部分是簍空的,可以讓外界藉由它的簍空去拿取它簍空部分中裸露的東西。

就以封裝的概念來說,Class的封裝性,就很明顯的訴說了一件事情:

我們必須透過接口,透過物件所提供的介面(interface),取得物件內部細節。如果沒有透過這個接口,就沒有辦法取得這個物件的細節。

換個比較有趣的說法可以是這樣:我們有一台跑車,但我們不用去理解跑車內的引擎、輪胎、把手、方向盤是怎麼做的,但我們知道這些東西是已經被做好的,我們只需要用我們已知的方法操作它就好(比如踩油門、拉手煞車之類的)。

繼承(Inherit)

由於物件的完整概念來自類別,所以繼承概念的描述,也是類別最重要的元素:

承繼我先前在「繼承」的相關篇章所描述的:

「父類別」與「子類別」的關係就像是爸爸與兒子一樣,兒子可以可以繼承爸爸的某些基因,但是他並不全然像爸爸,他仍然有他自己可以添加的特質。

這邊就不多說所謂繼承的概念。

多型(Polymorphism)

多型的概念,其實也是由繼承的概念向下延伸的,多型其實描述的就是:當一個父親的兩個兒子,而這兩個兒子都擁有父親的一些特質,但同時又不會完全跟父親相同。

比如兩個兒子說話的聲音都不會跟父親一樣。

這樣的概念回到多型中,可以精確的描述成:「就算子類別都繼承同樣的方法,但他們的實際內容都不相同」

為什麼需要物件導向?

Well,沒有物件導向的世界,在iOS開發裡可能會是一個ViewController中,有著散落一地的屬性、方法,它可能沒有任何的系統被歸納,所以讓大家在實際操作的時候,不知道要去哪些地方訪問這些被歸類的功能或概念。

也就是說,物件導向其實建構了一個程式開發的界門綱目科屬種,我們可以很清楚地知道,在這個東西內部可能有哪些東西可以調出來用。也讓開發者在執行開發的時候,不會在巨大的ViewController中大海撈針。

所以,充其量物件導向的概念就是在開發的過程中,所有被創建的邏輯都能被找到、應用,讓開發的過程更加的順利,這也是承繼開頭的三個問題中,最後一個問題的概念。

https://ithelp.ithome.com.tw/upload/images/20211002/20141127NxUPg825D8.png

tags: 鐵人賽

上一篇
# Day16--ARC到底是蝦餃?神秘的實體化背後的秘密
下一篇
# Day18--如果我早一點追求MVC小姊姊,我就不會亂寫了
系列文
Swift30天:從語法到觀念,告訴你在踏入實作前最好弄清楚的那些事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
wendy
iT邦新手 2 級 ‧ 2021-10-02 09:52:53

沒畫跪下圖,不及格/images/emoticon/emoticon15.gif

MJ iT邦新手 4 級 ‧ 2021-10-02 11:13:26 檢舉

釣到野生Wendy

Rex iT邦新手 3 級 ‧ 2021-10-02 12:01:14 檢舉

圖勒

MJ iT邦新手 4 級 ‧ 2021-10-02 12:38:19 檢舉

釣到野生Rex

我要留言

立即登入留言